/**
 * 管理诸事件条目表的集合结构
 */
#pragma once

#include "EventString.h"
#include "EventTable.h"
#include "EventType.h"

/* 管理事件条目表的集合结构对象 */
typedef struct _EventCollection EventCollection;
#define EVENT_COLLECTION(any) ((EventCollection *)any)

extern EventCollection *event_collection_new(void);

/**
 * @brief 设置 EventCollection 的目录。请注意，EventString 对象将被引用一次！
 */
extern void event_collection_set_path(EventCollection *self,
				      EventString     *event_path);

/**
 * @brief 打开 GroupID 对应的 EventTable。若对应的事件表不存在，则返回
 *        NULL。
 * @param will_create_new : 若对应的事件表不存在，是否创建一个空的表。
 */
extern EventTable *event_collection_load_table(EventCollection *self,
					       euint32		group_id,
					       bool will_create_new);

/**
 * @brief 删除一个 GroupID 对应的 EventTable
 */
extern void event_collection_remove_table(EventCollection *self,
					  euint32	   group_id);
